package org.ee.core.util;

/**
 * 数学运算工具类
 * @Author jokr
 * @Date 2025/8/26 下午1:55
 */
public class MathUtil {

    // 计算两个数的最大公约数（GCD）
    public static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }

    // 计算两个数的最小公倍数（LCM）
    public static int lcm(int a, int b) {
        return a * b / gcd(a, b);
    }

    // 判断一个数是否是质数
    public static boolean isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    // 计算一个数的阶乘
    public static long factorial(int n) {
        if (n < 0) {
            throw new IllegalArgumentException("Number must be non-negative");
        }
        long result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    // 计算一个数的平方根
    public static double sqrt(double n) {
        if (n < 0) {
            throw new IllegalArgumentException("Number must be non-negative");
        }
        return Math.sqrt(n);
    }

    // 判断一个数是否是偶数
    public static boolean isEven(int n) {
        return n % 2 == 0;
    }

    // 判断一个数是否是奇数
    public static boolean isOdd(int n) {
        return n % 2 != 0;
    }
}
